En este artículo, compartiré cómo puedes cambiar el nivel de registro de tu aplicación sin reiniciarla.
Los niveles de registro generalmente se consideran en orden de importancia: active los niveles "sin importancia" en el desarrollo (aviso, depuración y similares), pero habilite solo los niveles "más importantes" (advertencia, error, etc.) en producción, donde recursos como el tiempo de CPU y el espacio en disco son valiosos.
Pero, ¿qué pasa si su aplicación se ejecuta en el nivel de ERROR y comienza a enfrentar muchos problemas, pero no puede resolverlos a partir de los registros del nivel de ERROR? Cambiar el nivel de registro volviendo a implementar la aplicación requerirá mucho tiempo y recursos.
Además, ejecutar su aplicación en el nivel INFO o DEBUG en producción generará una gran cantidad de registros que pueden saturar el sistema de registro, lo que provocará un aumento de las operaciones de E/S y del consumo de recursos.
Para rescatarnos de estos problemas, GoFr - The Ultimate Golang Framework proporciona una forma segura de cambiar el nivel de registro sin reiniciar su aplicación.
Para cambiar el nivel de registro, cualquier aplicación GoFr requiere la siguiente configuración:
REMOTE_LOG_URL=(e.g., https://log-service.com/log-levels?id=1)
GoFr recupera el punto final proporcionado cada 15 segundos de forma predeterminada para obtener el último nivel de registro; este intervalo se puede aumentar o disminuir agregando la siguiente configuración.
REMOTE_LOG_FETCH_INTERVAL=(default: 15)
GoFr requiere la respuesta de la URL en el siguiente formato con dos campos obligatorios:
{ "data": { "serviceName": "test-service", "logLevel": "DEBUG" } }
Creemos el servicio de nivel de registro que proporcionará el nivel de registro a nuestra aplicación.
Usaré GoFr para crear el servicio; consulte la documentación para obtener más información.
Usaremos MySQL como base de datos. Para agregar MySQL, agregue las siguientes configuraciones en el archivo .env en el directorio de configuraciones.
DB_HOST=localhost DB_USER=root DB_PASSWORD=password DB_NAME=log-level DB_PORT=2001 DB_DIALECT=mysql
Para ejecutar el contenedor acoplable MySQL, ejecute el siguiente comando
docker run --name gofr-logger -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=log-level -p 2001:3306 -d mysql:8.0.30
Agreguemos el archivo main.go con las migraciones para crear la tabla y usaremos la función AddRESTHandler para registrar la ruta.
principal.go
package main import ( "gofr.dev/pkg/gofr" "gofr.dev/pkg/gofr/migration" ) const createTable = `CREATE TABLE level ( id INT PRIMARY KEY, service_name VARCHAR(255) NOT NULL, log_level VARCHAR(50) NOT NULL ); ` func createTableLevel() migration.Migrate { return migration.Migrate{ UP: func(d migration.Datasource) error { _, err := d.SQL.Exec(createTable) if err != nil { return err } return nil }, } } type Level struct { ID int `json:"id"` ServiceName string `json:"serviceName"` LogLevel string `json:"logLevel"` } func (u *Level) RestPath() string { return "level" } func main() { app := gofr.New() app.Migrate(map[int64]migration.Migrate{1: createTableLevel()}) err := app.AddRESTHandlers(&Level{}) if err != nil { app.Logger().Fatalf("Failed to register routes for level struct: %v", err) } app.Run() }
Después de ejecutar el servicio de registro, veremos los siguientes registros:
Tenemos todas las rutas REST registradas.
Para crear un servicio envíe la siguiente solicitud:
curl --location 'localhost:8000/level' \ --header 'Content-Type: application/json' \ --data '{ "id":1, "logLevel":"INFO", "serviceName":"gofr-app" }'
Para actualizar el nivel de registro envíe la siguiente solicitud:
curl --location --request PUT 'localhost:8000/level/1' \ --header 'Content-Type: application/json' \ --data '{ "id":1, "logLevel":"DEBUG", "serviceName":"gofr-app" }'
Para obtener el nivel de registro, envíe la siguiente solicitud:
curl --location 'localhost:8000/level/1'
La misma URL se utilizará en las configuraciones de nuestra aplicación cuyo nivel de registro debe cambiarse de forma remota.
Al utilizar la función de cambio de nivel de registro remoto de GoFr, obtendrá beneficios como:
Ajustes sin esfuerzo:
Modifique el nivel de registro en cualquier momento sin reiniciar la aplicación. Esto es especialmente útil durante la resolución de problemas.
Visibilidad mejorada:
Cambie fácilmente a un nivel de registro más detallado (p. ej., DEBUG) para obtener información más detallada sobre problemas específicos y luego vuelva a un nivel menos detallado (p. ej., INFO) para el funcionamiento normal.
Desempeño mejorado:
Generar una gran cantidad de registros puede saturar el sistema de registro, lo que genera un aumento de las operaciones de E/S y del consumo de recursos; cambiar al nivel de advertencia o error reduce la cantidad de registros y mejora el rendimiento, y REDUCE EL COSTO DE LA NUBE.
Apoya a GoFr dándole una ⭐estrella: https://github.com/gofr-dev/gofr
Además, tiene acceso al punto final público gratuito para exportar y ver los rastros de su aplicación @ tracer.gofr.dev.
Para habilitarlo, agregue la siguiente configuración en su archivo .env
TRACE_EXPORTER=gofr
Otros beneficios:
Si contribuye al GOFR ya sea en el desarrollo o escribiendo artículos. Puedes obtener obsequios (camisetas, pegatinas) gratis completando el formulario presentado en su GitHub Léame (en la parte inferior).
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3